package com.pactera.controller;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.pactera.entity.QUserBean2;
import com.pactera.entity.UserBean2;
import com.querydsl.jpa.impl.JPAQueryFactory;

@RestController
public class User2Controller {
	
	//实体管理对象 
	@Autowired private EntityManager entityManager;
	//queryDSL,JPA查询工厂
	
	private JPAQueryFactory queryFactory;
	
	//实例化查询工厂 
	@PostConstruct public void init() {
		queryFactory = new JPAQueryFactory(entityManager);
	}

	@RequestMapping(value = "/countExample")
	public long countExample() {
		//用户查询实体
		QUserBean2 _Q_user = QUserBean2.userBean2;
		return queryFactory.select(_Q_user.id.count())
				//根据主键查询总条数
				.from(_Q_user)
				//这里要注意一点，我们使用的fetchOne方法返回的类型完全是根据select方法内单个参数的类型对应的。
				.fetchOne();//返回总条数
	}
	
	@RequestMapping(value = "/sumExample")
	public double sumExample() {
		//用户查询实体
		QUserBean2 _Q_user = QUserBean2.userBean2;
		return queryFactory .select(_Q_user.socre.sum())
				//查询积分总数
				.from(_Q_user)
				.fetchOne();//返回积分总数
	}
	
	@RequestMapping(value = "/avgExample")
	public double avgExample() {
		//用户查询实体
		QUserBean2 _Q_user = QUserBean2.userBean2;
		return queryFactory .select(_Q_user.socre.avg())
				//查询积分平均值
				.from(_Q_user)
				.fetchOne();//返回平均值
	}
	
	@RequestMapping(value = "/maxExample")
	public double maxExample() {
		//用户查询实体
		QUserBean2 _Q_user = QUserBean2.userBean2;
		return queryFactory .select(_Q_user.socre.max())//查询最大积分 
				.from(_Q_user)
				.fetchOne();//返回最大积分 
	}

	@RequestMapping(value = "/groupByExample")
	public List<UserBean2> groupByExample() {
		//用户查询实体
		QUserBean2 _Q_user = QUserBean2.userBean2;
		return queryFactory .select(_Q_user) .from(_Q_user) .groupBy(_Q_user.socre)//根据积分分组
				.having(_Q_user.age.gt(22))//并且年龄大于22岁
				.fetch();//返回用户列表
	}

}
